// 引入koa-router
const Router = require('koa2-router');
const router = new Router();
// 引入model的sql语句
const {
    getUsers,
    addUsers,
    getIsLogin,
    updateIsLogin,
    updatePassword,
    updateLogout
} = require("../../model/api/users");

// 引入jsonwebtoken模块
const jwt = require("jsonwebtoken");
const SECRET = "hello";

// 注册
router.post('/register',async (ctx)=>{
    const { mobilePhone,password } = ctx.request.body;

    // 密码加密
    const encryptionPwd = jwt.sign(password, SECRET);

    // 存入数据库
    try {
        // 注册去重
        let result = await getUsers();
        // 判断是否数据库中有相同的用户名
        let isUserName = result.some(item=>item.mobilePhone === mobilePhone);
        // 判断
        if (isUserName) {
            ctx.body = {
                code:500,
                msg:"手机号已经被注册"
            }
        }else {
            await addUsers([mobilePhone,encryptionPwd,mobilePhone]);
            // console.log('数据写入成功');
            ctx.body = {
                code: 200,
                msg: "注册成功！正在跳转请稍等...",
            };
        }
    }catch (err){
        console.log(err);
        ctx.body = {
            code: 500,
            msg: '注册失败'
        };
    }
});
// 登录
router.post('/login',async (ctx)=>{
    const { mobilePhone,password } = ctx.request.body;

    // 密码加密
    const encryptionPwd = jwt.sign(password, SECRET);

    // 判断是否已注册
    let user = await getUsers();
    let isUser = user.find((item,index)=>{
        return item.mobilePhone === mobilePhone;
    });

    if (isUser){
        if (encryptionPwd === isUser.password) {
            // 判断用户是否已登录
            let is = await getIsLogin([isUser.id]);
            if (is[0].isLogin == 0){
                // 创建token
                const token = jwt.sign({
                        //第一个参数为要加密的某一个用户信息。
                        ID :isUser.id
                    }, //第二个参数为加密的秘钥字符串
                    SECRET/*, {
                    //第三个参数为token的过期时间
                    expiresIn: '7d'
                }*/
                );
                // console.log(token);
                await updateIsLogin([isUser.mobilePhone])
                ctx.body = {
                    code: 200,
                    msg: "登录成功！",
                    nickname: isUser.nickname,
                    token,
                };
            }else {
                ctx.body = {
                    code: 500,
                    msg: "该用户已登录"
                };
            }
        }else {
            ctx.body = {
                code: 500,
                msg: '密码或账号错误'
            };
        }
    }else {
        ctx.body = {
            code: 500,
            msg: '密码或账号错误'
        };
    }

})
// 忘记密码
router.post('/forgotPassword', async (ctx) => {
    const { mobilePhone, password } = ctx.request.body;

    // 密码加密
    const encryptionPwd = jwt.sign(password, SECRET);

    // 判断是否已注册
    let user = await getUsers();
    let isUser = user.find((item, index) => {
        return item.mobilePhone === mobilePhone;
    });
    // console.log(isUser);
    // 判断isUser 是否有值
    if (isUser) {
        if (encryptionPwd == isUser.password) {
            ctx.body = {
                code: 500,
                msg: '新密码与旧密码不能相同'
            };
        } else {
            await updatePassword([encryptionPwd,isUser.id]);
            ctx.body = {
                code: 200,
                msg: '密码修改成功,即将跳转登录页面'
            };
        }
    } else {
        ctx.body = {
            code: 500,
            msg: '该手机号未注册'
        };
    }
});
// 退出
router.post('/logout',async (ctx)=>{
    const token = ctx.request.body.token;

    let decoded = jwt.verify(token, SECRET);
    // console.log(decoded);

    if (token){
        await updateLogout([decoded.ID]);
        ctx.body = '成功退出';
    }
})
// 判断token是否过期
/*router.get('/token',async (ctx)=>{
    const token = ctx.request.headers["authorization"];
    try {
        let decoded = jwt.verify(token, SECRET);
        ctx.body = {
            code: 200
        }
    }catch (err) {
        console.log(err);
        ctx.body = {
            code: 500,
            msg: '登录过期，请重新登录'
        }
    }
})*/

module.exports = router;
